//#include<stdio.h>
//#include<unistd.h>
//#include<fcntl.h>
//#include<string.h>
//int main()
//{
//	int fd = open("log.txt",O_CREAT | O_APPEND,0664);
//	fork();
//	fork()&&fork||fork();
//	fork();
//	if(fd<0)printf("无法打开\n");
//	else printf("成功打开\n");
//	char * str= "hello fork\n";
//	write(fd,str,strlen(str));
//	close(fd);
//	return 0;
//}
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>

int main()
{
    // 先fork再打开文件，避免文件描述符共享问题
    fork();
    fork() && fork() || fork();
    fork();
    
    // 每个进程单独打开文件
    int fd = open("log.txt", O_CREAT | O_APPEND | O_WRONLY, 0644);
    if(fd < 0) {
        perror("无法打开文件");
        return 1;
    }
    
    printf("进程 %d 成功打开文件\n", getpid());
    
    char *str = "hello fork\n";
    write(fd, str, strlen(str));
    
    // 关闭当前进程的文件描述符
    close(fd);
    return 0;
}

